package ModStats;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;



public class ReadData {
	
	//
	private BufferedReader ReadIn = null;
	private List<InputObject> ObjectsList; 
	
	public ReadData(String DataFile){
		
		try {
			ReadIn = new BufferedReader(
					new FileReader(DataFile));
		} catch (FileNotFoundException e) {
			System.out.println("File Not found !");
			e.printStackTrace();
		}
		
		//
		ObjectsList = new ArrayList<InputObject>();
	}
	
	public void setData() throws Exception{
		
		//
		String aLine;
		String delims = ",";
		String[] tokens;
		String objName = null;
		InputObject obj = null;
		
		
		//templist pour un InputObject
		List<ValuesList> tempDataList = new ArrayList<ValuesList>();
		
		//les autres listes temp qu'on va utiliser, ici 4 
		int nbOfCol = FilesPropreties.getNbOfColumns(ReadIn);
		int nbOfDataCol = nbOfCol - 1;
		ValuesList[] q = new ValuesList[nbOfDataCol];
		for(int i = 0; i < nbOfDataCol; i++) {
			q[i] = new ValuesList();
		}
		
		//
		while((aLine = ReadIn.readLine() )!= null){			
			tokens = aLine.split(delims);
			if(objName != null && objName.equals(tokens[nbOfDataCol])){
			
				//on met à jour les listes temp
				for(int i = 0 ; i < nbOfDataCol; i++) {
					q[i].add(Double.parseDouble(tokens[i]));
					tempDataList.set(i, q[i]);
				}
				
				//à la sortie je met à jour ...
				//obj.setListData(tempDataList);
			}
			//sinon, c'est un nouveau objet donc on le crée et on ajoute les premiers données
			else{
				
				//si fin d'un objet et début d'un autre, on ajoute l'anciien ob dans la liste
				if(objName != null && !objName.equals(tokens[nbOfDataCol])) {
					obj.setListData(tempDataList);
					ObjectsList.add(obj);
				}
				
				// on prend le soin aussi de vider tout pour ....
				for(int i = 0 ; i < nbOfDataCol; i++) {
					q[i].clear();
				}
					
				
				objName = tokens[nbOfDataCol];
				obj = new InputObject(objName);
				//prepare l'ensebmble des données (ici on a 4 diff valeurs)
				for(int i = 0 ; i < nbOfDataCol; i++) {
					q[i].add(Double.parseDouble(tokens[i]));
					tempDataList.add(q[i]);
				}
				
				//à la sortie je met à jour ...
				//obj.setListData(tempDataList);
					
			}
			
		}
		//on ajoute le dernier à la fin
		obj.setListData(tempDataList);
		ObjectsList.add(obj);
		for(int i = 0 ; i < nbOfDataCol; i++) {
			q[i].clear();
		}
		tempDataList.clear();
		
		
	}
	
	public List<InputObject> getData(){
		return ObjectsList;
	}
	
	
	
	
}

